package com.bbva.itradecomex.bo.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.bbva.itradecomex.bo.iface.ClienteFlujoBO;
import com.bbva.itradecomex.bo.iface.ModalProductoBO;
import com.bbva.itradecomex.dao.iface.VistaClienteDAO;
import com.bbva.itradecomex.domain.ClienteFlujoExpoOperaciones;
import com.bbva.itradecomex.domain.ClienteFlujoExpoResultados;
import com.bbva.itradecomex.domain.ClienteFlujoImpoOperaciones;
import com.bbva.itradecomex.domain.ClienteFlujoImpoResultados;
import com.bbva.itradecomex.form.FlujoExportacionForm;
import com.bbva.itradecomex.form.FlujoImportacionForm;
import com.bbva.itradecomex.util.ITradexUtil;

@Service
public class ClienteFlujoBOImpl implements ClienteFlujoBO {
	
	@Autowired
	private VistaClienteDAO vistaClienteDAO;

	public List<ClienteFlujoImpoResultados> getListCFlujoImpoResultado(
			FlujoImportacionForm formulario) throws Exception {
		return vistaClienteDAO.getListCResultadoFlujoImp(formulario);
	}
	
	public List<ClienteFlujoImpoOperaciones> getListCFlujoImpoOperaciones(
			FlujoImportacionForm formulario) throws Exception {
		return vistaClienteDAO.getListCOperacionesFlujoImp(formulario);
	}

	@Override
	public void setearTotalesImp(ClienteFlujoImpoResultados subTotalImpDet,
			List<ClienteFlujoImpoResultados> listaCFlujoImpoResultados,
			ClienteFlujoImpoOperaciones subTotalImpOperDet,
			List<ClienteFlujoImpoOperaciones> listaCFlujoImpoOperaciones)
			throws Exception {
	
		// resultado
		if(listaCFlujoImpoResultados != null){
			for (ClienteFlujoImpoResultados clienteFlujoImpoResultadosIter : listaCFlujoImpoResultados) {
				subTotalImpDet.setFiaOper(ITradexUtil.addBigDecimal(subTotalImpDet.getFiaOper(), clienteFlujoImpoResultadosIter.getFiaOper()));
				subTotalImpDet.setFiaMonto(ITradexUtil.addBigDecimal(subTotalImpDet.getFiaMonto(), clienteFlujoImpoResultadosIter.getFiaMonto()));
				subTotalImpDet.setMplOper(ITradexUtil.addBigDecimal(subTotalImpDet.getMplOper(), clienteFlujoImpoResultadosIter.getMplOper()));
				subTotalImpDet.setMplMonto(ITradexUtil.addBigDecimal(subTotalImpDet.getMplMonto(), clienteFlujoImpoResultadosIter.getMplMonto()));
				subTotalImpDet.setMpnlpOper(ITradexUtil.addBigDecimal(subTotalImpDet.getMpnlpOper(), clienteFlujoImpoResultadosIter.getMpnlpOper()));
				subTotalImpDet.setMpnlpMonto(ITradexUtil.addBigDecimal(subTotalImpDet.getMpnlpMonto(), clienteFlujoImpoResultadosIter.getMpnlpMonto()));
				subTotalImpDet.setMpnlvOper(ITradexUtil.addBigDecimal(subTotalImpDet.getMpnlvOper(), clienteFlujoImpoResultadosIter.getMpnlvOper()));
				subTotalImpDet.setMpnlvMonto(ITradexUtil.addBigDecimal(subTotalImpDet.getMpnlvMonto(), clienteFlujoImpoResultadosIter.getMpnlvMonto()));
			}
		}

		// operaciones
		if(listaCFlujoImpoOperaciones != null){
			for (ClienteFlujoImpoOperaciones clienteFlujoImpoOperIter : listaCFlujoImpoOperaciones) {
				subTotalImpOperDet.setOpHfOper(ITradexUtil.addBigDecimal(subTotalImpOperDet.getOpHfOper(), clienteFlujoImpoOperIter.getOpHfOper()));
				subTotalImpOperDet.setOpHfMonto(ITradexUtil.addBigDecimal(subTotalImpOperDet.getOpHfMonto(), clienteFlujoImpoOperIter.getOpHfMonto()));
				subTotalImpOperDet.setOpImpOper(ITradexUtil.addBigDecimal(subTotalImpOperDet.getOpImpOper(), clienteFlujoImpoOperIter.getOpImpOper()));
				subTotalImpOperDet.setOpImpMonto(ITradexUtil.addBigDecimal(subTotalImpOperDet.getOpImpMonto(), clienteFlujoImpoOperIter.getOpImpMonto()));
				subTotalImpOperDet.setOpProOper(ITradexUtil.addBigDecimal(subTotalImpOperDet.getOpProOper(), clienteFlujoImpoOperIter.getOpProOper()));
				subTotalImpOperDet.setOpProMonto(ITradexUtil.addBigDecimal(subTotalImpOperDet.getOpProMonto(), clienteFlujoImpoOperIter.getOpProMonto()));
			}
		}
	}
	
	@Override
	public List<ClienteFlujoExpoResultados> getListCFlujoExpoResultado(
			FlujoExportacionForm formulario) throws Exception {
		return vistaClienteDAO.getListCResultadoFlujoExp(formulario);
	}
	
	@Override
	public List<ClienteFlujoExpoOperaciones> getListCFlujoExpoOperaciones(
			FlujoExportacionForm formulario) throws Exception {
		return vistaClienteDAO.getListCOperacionesFlujoExp(formulario);
	}
	
	@Override
	public void setearTotalesExp(ClienteFlujoExpoResultados subTotalExpDet,
			List<ClienteFlujoExpoResultados> listaCFlujoExpoResultados,
			ClienteFlujoExpoOperaciones subTotalExpOperDet,
			List<ClienteFlujoExpoOperaciones> listaCFlujoExpoOperaciones)
			throws Exception {
	
		// resultado
		if(listaCFlujoExpoResultados != null){
			for (ClienteFlujoExpoResultados clienteFlujoImpoResultadosIter : listaCFlujoExpoResultados) {
				subTotalExpDet.setMplOper(ITradexUtil.addBigDecimal(subTotalExpDet.getMplOper(), clienteFlujoImpoResultadosIter.getMplOper()));
				subTotalExpDet.setMplMonto(ITradexUtil.addBigDecimal(subTotalExpDet.getMplMonto(), clienteFlujoImpoResultadosIter.getMplMonto()));
				subTotalExpDet.setMpnlpOper(ITradexUtil.addBigDecimal(subTotalExpDet.getMpnlpOper(), clienteFlujoImpoResultadosIter.getMpnlpOper()));
				subTotalExpDet.setMpnlpMonto(ITradexUtil.addBigDecimal(subTotalExpDet.getMpnlpMonto(), clienteFlujoImpoResultadosIter.getMpnlpMonto()));
				subTotalExpDet.setMpnlvOper(ITradexUtil.addBigDecimal(subTotalExpDet.getMpnlvOper(), clienteFlujoImpoResultadosIter.getMpnlvOper()));
				subTotalExpDet.setMpnlvMonto(ITradexUtil.addBigDecimal(subTotalExpDet.getMpnlvMonto(), clienteFlujoImpoResultadosIter.getMpnlvMonto()));
				subTotalExpDet.setFialOper(ITradexUtil.addBigDecimal(subTotalExpDet.getFialOper(), clienteFlujoImpoResultadosIter.getFialOper()));
				subTotalExpDet.setFialMonto(ITradexUtil.addBigDecimal(subTotalExpDet.getFialMonto(), clienteFlujoImpoResultadosIter.getFialMonto()));
				subTotalExpDet.setFianlOper(ITradexUtil.addBigDecimal(subTotalExpDet.getFianlOper(), clienteFlujoImpoResultadosIter.getFianlOper()));
				subTotalExpDet.setFianlMonto(ITradexUtil.addBigDecimal(subTotalExpDet.getFianlMonto(), clienteFlujoImpoResultadosIter.getFianlMonto()));
			}
		}
		
		// operaciones
		if(listaCFlujoExpoOperaciones != null){
			for (ClienteFlujoExpoOperaciones clienteFlujoImpoOperIter : listaCFlujoExpoOperaciones) {
				subTotalExpOperDet.setOphfOper(ITradexUtil.addBigDecimal(subTotalExpOperDet.getOphfOper(), clienteFlujoImpoOperIter.getOphfOper()));
				subTotalExpOperDet.setOphfMonto(ITradexUtil.addBigDecimal(subTotalExpOperDet.getOphfMonto(), clienteFlujoImpoOperIter.getOphfMonto()));
				subTotalExpOperDet.setOpImpOper(ITradexUtil.addBigDecimal(subTotalExpOperDet.getOpImpOper(), clienteFlujoImpoOperIter.getOpImpOper()));
				subTotalExpOperDet.setOpImpMonto(ITradexUtil.addBigDecimal(subTotalExpOperDet.getOpImpMonto(), clienteFlujoImpoOperIter.getOpImpMonto()));
				subTotalExpOperDet.setOpProOper(ITradexUtil.addBigDecimal(subTotalExpOperDet.getOpProOper(), clienteFlujoImpoOperIter.getOpProOper()));
				subTotalExpOperDet.setOpProMonto(ITradexUtil.addBigDecimal(subTotalExpOperDet.getOpProMonto(), clienteFlujoImpoOperIter.getOpProMonto()));
				subTotalExpOperDet.setOpAfectOper(ITradexUtil.addBigDecimal(subTotalExpOperDet.getOpAfectOper(), clienteFlujoImpoOperIter.getOpAfectOper()));
				subTotalExpOperDet.setOpAfectMonto(ITradexUtil.addBigDecimal(subTotalExpOperDet.getOpAfectMonto(), clienteFlujoImpoOperIter.getOpAfectMonto()));
			}
		}
	}
}
